'''
该示例使用sympy库求解求解三个简单代数方程，获得符号解和解的幂次，并展示微分diff()，代入sub()等函数的用法
(1)x^3 = 1
(2)(x-2)^2 * (x-1)^3 = 0
(3)方程组x^2 + y^2 = 1, x - y = 0
'''

import numpy as np
from sympy import *

x = symbols('x')
# 求解方程 x^3 = 1
eq1 = Eq(x**3, 1)
solution1 = solve(eq1, x)
print(f"(1)的解为{solution1}")
#solve函数只会返回解，不会返回解是几次项

# 求解方程 (x-2)^2 * (x-1)^3 = 0
eq2 = Eq((x - 2)**2 * (x - 1)**3, 0)
solution2 = solve(eq2, x)
print(f"(2)的解为{solution2}")
print(f"(2)的幂次和解为{roots(eq2, x)}")  # roots函数会返回解的幂次

# 求解方程组 x^2 + y^2 = 1, x - y = 0
y = symbols('y')
solution3 = solve((Eq(x**2 + y**2, 1), Eq(x - y, 0)), (x, y))
print(f"(3)的解为{solution3}")
eq3 = Eq(diff(6*x**2+3*x,x),0)
print(solve(eq3,x))  # 求解方程左边的导数

# sub和diff用法示例
# diff用于求导，sub用于表达式的变量替换或赋值
expr = x**2 + 2*x + 1
deriv = diff(expr, x)  # 对x求导
print(f"表达式对x的导数: {deriv}")

# sub用法：将x替换为2
value = expr.subs(x, 2)
print(f"将x=2代入表达式的值: {value}")
# sub还可以同时替换多个变量，如expr.subs({x:2, y:3})